#include <functional>
#include <iostream>
#include <memory>

// -------------------- DynamicProxy 类 --------------------

class DynamicProxy {
private:
    std::function<void()> func; // 存储要执行的函数

public:
    // 构造函数，接受一个 std::function 对象
    DynamicProxy(const std::function<void()>& f) : func(f) {}

    // 执行代理逻辑，并调用实际的函数
    void execute() {
        std::cout << "Proxy before executing." << std::endl;
        func(); // 执行真实函数
        std::cout << "Proxy after executing." << std::endl;
    }
};

// -------------------- 实际函数 --------------------

void realFunction() {
    std::cout << "Real Function is called." << std::endl;
}

// -------------------- 测试用例 --------------------

int main() {
    // 创建一个 DynamicProxy 对象，传入实际函数
    DynamicProxy proxy(realFunction);

    // 使用代理对象执行函数
    std::cout << "---- Executing realFunction through DynamicProxy ----" << std::endl;
    proxy.execute();

    // 使用 Lambda 表达式创建另一个 DynamicProxy 对象
    DynamicProxy lambdaProxy([]() {
        std::cout << "Real Lambda Function is called." << std::endl;
    });

    std::cout << "\n---- Executing Lambda Function through DynamicProxy ----" << std::endl;
    lambdaProxy.execute();

    return 0;
}
